//
//  LBReactPatcherDao.h
//  LBReactPatcher
//
//  Created by WuShiHai on 19/5/24.
//  Copyright (c) 2019 Lebbay All rights reserved.
//

#import <Foundation/Foundation.h>
#import "LBDatabase.h"
#import "LBReactPatcherModel.h"

@interface LBReactPatcherDao : NSObject

/**
 使用数据库对象进行初始化
 
 @param database 数据库对象
 @return 实例
 */
- (instancetype)initWithDatabase:(LBDatabase *)database;

/**
 实例所使用的数据库对象
 */
@property (nonatomic, strong, readonly) LBDatabase *database;

/**
 选取所有有效的补丁包信息
 
 @return 资源包数组
 */
- (NSArray<LBReactPatcherModel *> *)selectAll;

/**
 根据版本和类型加载所有补丁包（包括state 为 0 或者 1）
 
 @param appVersion 版本
 @param identifier 包名
 @param mainVersion 主包版本号
 @param type 类型
 @return 资源数组
 */
- (NSArray<LBReactPatcherModel *> *)selectByVersion:(NSString *)appVersion
                                         identifier:(NSString *)identifier
                                        mainVersion:(NSInteger)mainVersion
                                               type:(LBReactPatcherType)type ;

- (NSArray<LBReactPatcherModel *> *)selectByVersion:(NSString *)appVersion
                                         identifier:(NSString *)identifier
                                             isMain:(BOOL)isMain
                                        mainVersion:(NSInteger)mainVersion
                                         moduleName:(NSString *)moduleName
                                               type:(LBReactPatcherType)type;

/**
 插入对象
 
 @param model 对象
 @return 是否成功
 */
- (BOOL)insert:(LBReactPatcherModel *)model;

/**
 逻辑删除补丁包
 
 @param model 补丁对象
 @return 是否成功
 */
- (BOOL)delete:(LBReactPatcherModel *)model;

/**
 更新补丁包状态信息
 
 @param model 对象
 @return 是否更新成功
 */
- (BOOL)updateState:(LBReactPatcherModel *)model;

@end
